package gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JOptionPane;

import bebetes.Bebete;
import bebetes.ChampDeBebetes.StatutChamp;

/**
 * Class écouteur d'événements Swing pour le LanceBebete.
 * 
 * @author gnpt
 */
public class LanceBebetesListener implements ActionListener {

	private LanceBebetes instance;

	/**
	 * Constructeur du listener de LanceBebetes.
	 * 
	 * @param frame
	 *            l'instance de LanceBebetes à laquelle est associé ce listener.
	 */
	public LanceBebetesListener(LanceBebetes frame) {
		this.instance = frame;
	}

	/**
	 * Accesseur pour le LanceBebetes associé à ce listener.
	 * 
	 * @return le LanceBebetes associé à ce listener.
	 */
	public LanceBebetes getLanceBebetes() {
		return this.instance;
	}

	/**
	 * @see ActionListener#actionPerformed(ActionEvent)
	 */
	@SuppressWarnings("unchecked")
	@Override
	public void actionPerformed(ActionEvent e) {
		final String action = e.getActionCommand();

		if (action.equals("chargeurDeBebetes")) {
			this.instance.chargeBebetes();
		} else if (action.equals("initBebetes")) {
			if (this.instance.getListeTypesBebetes().getSelectedValues().length == 0) {
				JOptionPane.showMessageDialog(this.instance,
						"Vous devez sélectionner au moins un type de bébêtes.",
						"Information", JOptionPane.INFORMATION_MESSAGE);
			} else {
				if (this.instance.getChamp().getStatutChamp() != StatutChamp.ARRETE) {
					this.instance.getChamp().arrete();
				}

				this.instance
						.setBebetesDisponibles(new ArrayList<Class<? extends Bebete>>());
				this.instance.getChamp().setTypeBebetes(
						new ArrayList<Class<? extends Bebete>>());

				for (Object o : this.instance.getListeTypesBebetes()
						.getSelectedValues()) {
					this.instance.getBebetesDisponibles().add(
							((Class<? extends Bebete>) o));
					this.instance.getChamp().getTypesBebetes().add(
							((Class<? extends Bebete>) o));
				}

				this.instance.getChamp()
						.creerEtAjouterNombreAleatoireBebetesPourChaqueType(
								this.instance.getChamp().getTypesBebetes(),
								100);

				this.instance.getChamp().rafraichirVisualisateur();
			}
		}
	}
}
